jjzjj

javascript - Jade 模板 - 动态调用 Mixin

全部标签

ruby - 在 RSpec 中调用相同的 rake 任务两次

我正在尝试使用rspec测试rake任务,为此我需要调用它两次,但是它只被调用一次。it'firsttest'doRake::Task['my_rake_task'].invoke#raketaskwasprocessedendit'secondtest'doRake::Task['my_rake_task'].invoke#raketaskwasNOTprocessedend 最佳答案 如果rake任务已经被调用过,除非你调用它,否则它不会再次运行:@rake[@task_name].reenable或调用它@rake[@task

ruby - 使用 attr_accessor 动态创建类属性

在Ruby中,有没有办法动态地向类中添加实例变量?例如:classMyClassdefinitializecreate_attribute("name")enddefcreate_attribute(name)attr_accessorname.to_symendendo=MyClass.newo.name="Bob"o.name 最佳答案 一种方法(还有其他方法)是这样使用instance_variable_set和instance_variable_get:classTestdefcreate_method(name,&bloc

ruby-on-rails - 在 RSpec 2 中动态生成共享示例?

我试图通过创建一个共享示例组来保持我的规范干燥,该示例组对所有管理Controller(我项目的Admin命名空间下的所有Controller)执行样板检查。我正在努力弄清楚如何去做,因为共享示例需要提供有关要使用的操作和参数的信息。如果测试失败,理想情况下它应该显示有意义的错误(即包括它正在测试的操作的详细信息)。require'spec_helper'shared_examples"anadmincontroller"dobefore(:each)do@non_admin=User.make@admin=User.make(:admin)endcontext"asanadminus

ruby - 是否可以在不调用初始化的情况下实例化 Ruby 类?

有时,当我编写单元测试时,我需要在不调用initialize方法的情况下实例化一个类。例如,当构造函数实例化其他类时,无论如何我都会用stub替换它们。例如:classSomeClassThatIWillTestdefinitialize@client=GoogleAnalyticsClient.new@cache=SuperAdvancedCacheSystem.newend#...end在测试中,我可能会将@client和@cache替换为stub,因此我宁愿从未调用构造函数。有什么黑魔法可以帮助我解决这个问题吗? 最佳答案 当

Ruby:如何更改函数调用中参数的值?

我将如何在ruby​​中实现一个函数,如下所示?change_me!(val)更新:我打算做的是:defchange_me!(val)val=val.chopwhileval.end_with?'#'orval.end_with?'/'end这刚刚结束......change_me!'test#///'=>"test#///" 最佳答案 您的想法是错误的。虽然可以在Ruby中执行此操作,但它会过于复杂。正确的做法是:val.change_me!当然,这取决于您要更改的类别。关键是,按照惯例,带有“!”的方法影响调用它们的类实例。所以

ruby - 如何在 Ruby 中动态创建局部变量?

我正在尝试使用eval在Ruby中动态创建局部变量并改变局部变量数组。我在IRB中这样做。eval"t=2"local_variables#=>[:_]eval"t"#=>NameError:undefinedlocalvariableormethod`t'formain:Objectlocal_variables[:_,:t]t#=>NameError:undefinedlocalvariableormethod`t'formain:Object 最佳答案 您必须使用相同的绑定(bind)对象同步评估。否则,单个评估有其自己的范围

ruby - 在 Ruby 中动态创建类

我有一个应该看起来像这样的类:classFamily_Type1@people=Array.new(3)@people[0]=Policeman.new('Peter',0)@people[1]=Accountant.new('Paul',0)@people[2]=Policeman.new('Mary',0)definitialize(*ages)foriin0...@people.length@people[i].age=ages[i]endendend我希望能够在运行时定义一堆类似于这个的类(在启动时定义一次),其中数组的大小和分配给每个参数的类型在运行时从外部规范文件定义。我使

Ruby:使用 self 关键字从内部调用私有(private)方法

classMyClassdeftestputsmy_idputsself.my_idendprivatedefmy_id115endendm=MyClass.newm.test此脚本产生输出:115priv.rb:4:in`test':privatemethod`my_id'calledfor#(NoMethodError)frompriv.rb:15:in`'使用self关键字和不使用关键字从内部调用方法有什么区别?根据我的Delphi和C#经验:没有区别,self可以用来避免与局部变量的名称冲突,表示我想调用实例函数或引用实例变量. 最佳答案

ruby-on-rails - 如何在 Rails Controller 中调用 channel 方法?

我有一个订阅用户的ActionCable方法。如果开始新的session,我也想为用户订阅新channel。我想不出在Controller中调用channel方法的正确语法。更新:问题是消息在发送时附加到聊天框,但是当发送第一条消息时,websocket连接尚未建立,因此在用户看来好像消息没有发送(因为它没有被附加)。channel/msgs_channel.rbclassMsgsChannel在我的convosController中,create方法,我尝试了几种方法:convos_controller.rbdefcreate@convo=Convo.create!({sender_

ruby - 动态 RSpec 规范生成

我想根据外部数据源动态生成一系列规范。具体来说,我下载了一个Google电子表格,电子表格中的每一行都应该用于其自己的测试用例:describe"Cases"dobefore(:all)do#Downloadspreadsheetand#populatecasesinDBendCases.eachdo|case|it"Case#{case.num}"do#specendendend这是行不通的,因为对于使用RSpec的初学者来说,(据我所知)不会在编译时“看到”任何规范,所以before(:all)永远不会执行。如果我要放置一个空的itblock,它会让before(:all)执行,但